There are many reasons why it may be desirable for a first computing device to receive a credential, a resource, code, or other content from a second computing device, and/or for the second computing device to distribute or transmit the credential, resource, code, etc. to the first computing device, and vice versa. For instance, in order to give access to resource(s) of the first computing device to the second computing device, it is frequently desirable to have the first computing device “trust” something about the second computing device, e.g., for security and/or privacy reasons. Such a credential can be distributed between two computing devices in any computing environment, e.g., network architectures that include peer-to-peer clients, distributed computing systems, thin-client architectures where application processing occurs mainly on a central server, but can be distributed as well.
FIG. 1A generally illustrates computing between a first computing device (e.g., server S) and a second computing device (e.g., client C) in an exemplary networked environment. Server S and client C communicate over any network connection NC, whether wired or wireless. For instance, server S may wish to trust client C before delivering access to Application A, or client C may wish to trust server S before it accepts a credential, or other content from the client C. Or, a first computing device S may wish to receive a public key from second computing device C, or vice versa. Methods for establishing trust between the devices via a simple mechanism are thus desired for a full range of communications among computing devices.
As illustrated in FIG. 1B, the world of computing devices and types of content that may be requested from various other computing devices is quite diverse, both in terms of media devices and media types. For exemplary purposes only, FIG. 1B illustrates that there are many kinds of media, such as music (MP3s, WMVs, etc.), streaming audio/video, photos (JPEGS, GIFs, etc.), movie files (MOVs, MPEG, etc.), advertisements, broadcast media (Radio, TV, Cable, etc.), graphics data, etc. FIG. 1B also illustrates that there are a variety of devices that render media in some fashion, for some purpose. These devices include, but are not limited to, televisions, radios, tuners, DVD players, VCRs, DVRs, digital media rendering devices, set top boxes, MP3 players, Smart Display devices, laptops, gaming machines, remote control devices, cell phones, PDAs, digital picture frames, etc. Given the disparate number of devices and locations where digital content may be stored, establishing trust automatically among any two devices with simplicity in such a system is thus an important problem, in order to enable sharing of content or resources among a variety of computing devices in what becomes an established trust enclave of devices. It is thus desirable to have a generic and simple mechanism or framework for trusting the content of an exchange between a first device and a second device, or vice versa.
For another example of when trust is desirable in a computing system as between a plurality of computing devices, a common method to securely transfer information securely between one place and another on a network is by using public/private key cryptography. If one machine obtains a public key and another machine has the matching private key, the first machine can encrypt secret information using the public key and trust that only a machine holding that matching private key will be able to decrypt it. Without a trusted transfer of the public key from one place in the network to another place, however, there is no way to ensure that a malicious machine sitting on the network did not intercept the intended public key during its transmission and replace it with its own.
Thus, building trust into the exchange of the public key, or any content, via a simple mechanism or method is desired. It would be further desirable to be able transmit any content, such as a public key, from one place to another over a network in a way that can be trusted, so that the second machine knows for sure that the content that it is receiving in fact came from the “real” first machine. In addition, it would be desirable to have systems, application programming interfaces, code implementations, user interfaces and protocols for achieving the above-described objectives to obtain the trusted results.